Блог им. kurd |Алготрейдинг. Графики ренко - раскрытие сокровенной тайны или сокрытие очевидной реальности?

Если кто не слышал про ренко -  вот здесь ru.wikipedia.org/wiki/Рэнко_(график)
Алготрейдинг. Графики ренко - раскрытие сокровенной тайны или сокрытие очевидной реальности?
На ренко (рэнко) графике движения цены группируются-округляются в фиксированный размер ступени-кирпича — по вертикальной оси Y.  По оси X получаются только номера кирпичей, которые охватывают разные временные отрезки — дата начала кирпича и сколько времени потребовалось на прохождение цены в пределах кирпича.

Если вы не фанаты ренко-графиков и ваш мозг включён всегда без перерывов, то сразу возникает вопрос — чем ренко лучше графика Зигзаг?



( Читать дальше )

Блог им. kurd |Алготрейдинг. На какой минимальный временной интервал можно делать ставку внутри дня?

Если играть во фьючерс на индекс РТС, то комиссия 0.03% при объёме контракта 160000 руб ( стоимость шага цены 16.85548 руб) на 04.04.2025 составит около 50 руб.
Чтобы выигрыш был больше комиссии, нужно делать ставку на такой временной интервал, где можно выиграть больше 100 руб. Т.е. надо определить, какой тайм-фрейм даёт средний за день True Range более 100 руб.
Казалось бы, нет проблем. Уже на минутках средняя за день True Range ходит в разные дни между 100 и 200 рублями. Заковыка в том, что за счёт большой сигмы (ср.кв.отклонение — изменчивость, волатильность) True Range в большом числе интервалов может оказаться много ниже 100 руб.

Так что надо выбирать временной интервал не только на среднее значение True Range для таких интервалов, но ещё и так, чтобы средняя была больше сигмы на 100 руб. Тогда правильный прогноз направления движения внутри выбранного временного интервала будет чаще вознаграждаться ещё и размером этого движения.

Минутный тайм-фрейм никак не обеспечивает желаемого соотношения средней и сигмы. Необходимое превышение средней над сигмой начинает вырисовываться только на 10-минутках и 15-минутках, да и то не всегда. Вот распределение по квантилям процентных значений True Range  (относительно Close) реальной истории 15-минуток фьючерса RTS.

( Читать дальше )

Блог им. kurd |Алготрейдинг. Почему гуру учат торговать, а не торгуют сами?

Недавно попалось «объяснение». Эти гуру якобы уже наторговали успешно в небольших масштабах, но с большой суммой их торговая стратегия (ТС) не даёт выигрыша. Поэтому они предлагают ученикам поторговать каждому с их небольшими суммами и повторить выдающийся успех учителя.
Насчёт успеха гуру в прошлой торговле — пусть, не будем придираться.
Но что их нынешние большие деньги не влезают в их ТС — позвольте!

Если толпы учеников со своими небольшими деньгами полезут торговать все по одной купленной ТС, это как раз и получатся те большие деньги, которые, как объявлено,  в эту ТС не влезают. А если от вас отбрехаются, что все ученики, следуя одной ТС, будут торговать по-разному и получать обещанный успех, — так что мешает учителю разделить свои большие деньги на малые доли и каждой из них «торговать по-разному»?
Написать уйму роботов, чтобы они торговали по-разному, — не надо выдающихся способностей.
Тут уже возникают не «смутные сомнения», а вполне очевидные выводы.

Второй вопрос, почему этим первым вопросом не задаются многочисленные покупатели успеха?

( Читать дальше )

Блог им. kurd |Алготрейдинг. Очередные чудеса и их разоблачение

Новое чудо объявлено не так давно для растущих бумаг
smart-lab.ru/blog/1121015.php
и затем даже для не очень растущих
smart-lab.ru/blog/1124855.php

Как всегда у таких чудодеев, описание алгоритма неполно и неоднозначно.
На картинке автора чуда цена продажи на Close белой свечи всегда выше покупки первой из предыдущих чёрных свеч. В реальности это не гарантировано.
Поэтому уточним. Чтобы исполнить указание из первого описания стратегии
Ha зaкpытии бeлoй cвeчи зaкpывaeм paнee oткpытыe лoнги в плюc.
т.е. чтобы закрыть в плюс ВСЕ лонги, надо закрывать позицию не на первой попавшейся белой свече, а только по цене выше самой дорогой из предыдущих покупок.
Однако, тестирование показало, что гораздо больший выигрыш будет именно при закрытии позиции на первой белой свече!
При этом не все ранее открытые лонги закрываются в плюс.

Вот так выглядит страгегия  BlackAndWhite в программе WealthLab
for (int bar = 1; bar < Bars.Count; ++bar) {
  if (IsLastPositionActive && (bar == Bars.Count-1 ||
      Close[bar] > Open[bar])) {
    while (ActivePositions.Count > 0)
      ExitAtClose (bar, ActivePositions[0]);
  } else if (bar < Bars.Count-10 && Close[bar] < Open[bar]) {
    BuyAtClose (bar);
  }
}
История торгов Сбера с 01.01.2018 по 31.12.2024 на дневках добыта с сайта

( Читать дальше )

Блог им. kurd |Алготрейдинг. Импорто-замещение своими руками


До недавнего времени я испытывал торговые стратегии в программе WealthLab. Но на днях возникла потребность проверки её результатов. Поэтому состряпал частичный аналог на C++.
Проверка показала значительное превосходство самоделки по быстродействию и полное совпадение результатов с фирменной системой — до копейки.

Вот как выглядит скрипт на C# в WealthLab
for (int bar = 1; bar != Bars.Count; ++bar) {
  if (IsLastPositionActive && (bar == Bars.Count-1 ||
      Close[bar] > Open[bar])) {
    while (ActivePositions.Count > 0)
      ExitAtClose (bar, ActivePositions[0]);
  } else if (bar < Bars.Count-10 && Close[bar] < Open[bar])
    BuyAtClose (bar);
}
и его аналог на C++
for (unsigned bar = 1; bar != Count; ++bar) {
  if (IsLastPositionActive() && (bar == Count-1 ||
      Close[bar] > Open[bar])) {
    while (ActivePositions.size() > 0)
      ExitAtClose (bar, ActivePositions.front());
  } else if (bar < Count-10 && Close[bar] < Open[bar])
    BuyAtClose (bar);
}
На всё-про-всё ушла рабочая неделя — годы уже не те.

( Читать дальше )

Блог им. kurd |Алготрейдинг. Как искать оптимум параметров торговой системы

Не важно, какую функцию и как оптимизировать, минимум отклонения прогноза цены от фактической или максимум счёта (вложение+выигрыш), — возможны два подхода: 1) прямой перебор (brute force) всех вариантов и 2) градиентный метод (наискорейшего спуска).
Прямой перебор может потребовать громадных вычислений, не реализуемых практически.
Градиентный метод очень зависит от выбора начальной точки поиска. При множестве локальных экстремумов и только одном глобальном, существенно отличающемся от локальных, очень велика вероятность попадания на незначительный локальный экстремум. Метод деформируемого многогранника Нелдера-Мида (Simplex), хоть и решает некоторые трудности градиентного, в принципе от него не отличается.

Промежуточные методы, такие как Монте-Карло или генетический алгоритм, хоть и повышают вероятность попадания в глобальный экстремум с меньшим объёмом счёта против прямого перебора, не дают достаточной гарантии.

Факт множественности экстремумов целевой функции можно считать вполне установленным.

( Читать дальше )

Блог им. kurd |Алготрейдинг. Скрипт Lua для выгрузки истории котировок из Quik'а

Сайт finam.ru и mfd.ru перестали быть полезными для выгрузки истории котировок.
Это скрипт
-- График должен быть открыт в Quik'е
Class = "SPBFUT" -- "CETS_MTL" "CETS"
SecId="BRK4" -- "NGJ4" "GLDRUB_TOM" "USD000UTSTOM" "SiZ3"
Intrvl = INTERVAL_H1 -- D1 -- M5
Header = "<TICKER>;<PER>;<DATE>;<TIME>;"..
  "<OPEN>;<HIGH>;<LOW>;<CLOSE>;<VOL>"
Period = "60" -- Дневки - 0, W1, MN1, H4, H2 - недопустимо

function Log (i)
  local t = DS:T(i)
  local ymd = string.format ("%04d%02d%02d", t.year, t.month, t.day)
  local hms = string.format ("%02d%02d%02d", t.hour, t.min, t.sec);
  if not (IniDt <= ymd and ymd <= FinDt) or
     not (IniTm <= hms and hms <= FinTm) then return end
  local str = string.format ("%s;%s;%s;%s;%.4f;%.4f;%.4f;%.4f;%.0f\n"
    ,SecId, Period, ymd, hms
    ,DS:O(i), DS:H(i), DS:L(i), DS:C(i), DS:V(i))
  F:write (str)
end -- Log()

function OnInit (scriptPath)
  qu = require ("QuikUtil(qu)") -- lu,qc,tu
  ScriptDir, ScriptName = lu.


( Читать дальше )
  • обсудить на форуме:
  • Quik Lua

Блог им. kurd |Какие данные грузить в индикаторы для интрадея. Эврика!


Интрадей — игра внутри дня. Утром открыл позицию, в конце дневной сессии закрыл.
Что меня всегда заедало — утренние гэпы между разными датами. Например, всякие скользящие на них выходят из себя и не сразу входят в режим, пригодный для использования.

Если предполагать, что все закономерности движения цены в её графике, то для внутридневного движения это ещё как-то может быть обоснованно, но утренние гэпы вряд ли могут быть согласованы с движением цены внутри дня.
Это две совершенно разные закономерности и очень мало шансов, что какой-то индикатор может учесть их в совокупности.

Проще всего не показывать индикатору эти гэпы и играть внутри дня только по внутридневным закономерностям.
В Quik'e это можно сделать, поставив «Фильтр по времени» в окне «Редактирование настроек графика» на интервал от 10:15 (чтобы исключить после-гэпие) до 18:45 и написав Lua-скрипт, который исправляет котировки, сокращая утренние гэпы на менее резкие изменения, например, на основе индикатра ATR за предыдущий день. И уже по этому графику ловить очищенные от гэпов внутридневные закономерности.

( Читать дальше )

Блог им. kurd |Алготрейдинг. Об относительных приращениях

По мотивам напечатанного «Алготрейдинг. Как правильно склеивать фьючерсы»
smart-lab.ru/blog/1071687.php
Там, помимо прочего, упомянуто, что для обучения торговой системы лучше представлять историю котировок не абсолютными приращениями, а относительными.
Ну хотя бы для того, чтобы торговая система реагировала одинаково на изменение цены в 1%, независимо от текущего уровня в 1000 или в 2000 пунктов. Смысл не в доходе, а в доходности.
И предложены два варианта представления относительных приращений.
1) X[i]/X[i-1] — 1 и
2) ln (X[i]/X[i-1])

При отклонениях X[i] от X[i-1] в плюс или минус не более 10% различие этих вариантов в пределах 1%.
Алготрейдинг. Об относительных приращениях
Но при более значительных отклонениях X логарифмическое представление существенно меньше линейного.
Насколько оправдано логарифмическое преуменьшение?

Может где-то в других случаях логарифмическое представление имеет глубокий математический смысл.
Но в данном случае это ведёт к тому, что торговая система будет придавать большим отклонениям цены в минус другое значение, нежели таким же отклонениям в плюс. А ведь относительные приращения используются как раз для того, чтобы избежать подобных различий в работе торговой системы.

( Читать дальше )

Блог им. kurd |Алготрейдинг. Как правильно склеивать фьючерсы и зачем


Цены фьючерсов свободны от нерегулярностей, искажений, вносимых пред-дивидендным подъёмом и после-дивидендным провалом. Утренние гэпы у фьючерсов тоже меньше тех акций, что торгуются только в дневные сессии. Да и затраты на фьючерс, особенно в шорте, гораздо меньше акции. Так что для краткосрочной игры фьючерсы лучше подходят.

Вопрос склеивания возникает из неравенства цены фьючерса в день его исполнения (экспирации) с ценой следующей серии того же фьючерса на ту же дату. Эта разница возникает за счёт бэквордации или контанго, что гораздо чаще.
Теоретически, цена фьючерса в момент его исполнения должна сравняться с ценой базового актива.

В Quik'е и на разных сайтах склеивают истории предыдущих серий с последующими посредством плавного сращивания цены предыдущего фьючерса с последующим на коротком участке перед экспирацией. Таким образом, искажаются приращения цен на этом временном интервале.

Для выявления «закономерности» движения цен главное значение имеют именно их приращения. Чтобы избежать искажения приращений, надо просто сдвинуть все цены предыдущего фьючерса на величину разрыва его цены в момент экспирации с ценой последующей серии на тот же момент. Для склеивания нескольких серий, этот сдвиг надо повторять с каждым предыдущим фьючерсом, начиная от последнего в истории котировок.

( Читать дальше )

....все тэги
UPDONW
Новый дизайн